package edu.gdpu.gc;

import java.beans.PropertyVetoException;
import java.lang.ref.SoftReference;
import java.util.ArrayList;
import java.util.List;

/**
 * @author mazebin
 * @date 2021年 07月16日 16:05:10
 * 演示软引用
 * -Xmx20m -XX:+PrintGCDetails -verbose:gc
 * 在GC回收掉能回收的对象之后还没有足够的内存时，
 * 则会将其引用对象回收。如果回收完软引用对象内存还不足够，
 * 才会抛出内存溢出异常
 *
 */
public class SoftReferenceTest {
    private static  final  int _4MB=4*1024*1024;
    public static void main(String[] args) {
        soft();
    }
    public static  void soft(){
        List<SoftReference<byte[]>>  list =new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            SoftReference<byte[]> ref = new SoftReference<>(new byte[_4MB]);
            System.out.println(ref.get());
           list.add(ref);
            System.out.println("list.size:"+list.size());

        }
        System.out.println("循环结束："+list.size());
        for (SoftReference<byte[]> softReference : list) {
            System.out.println(softReference.get());
        }
    }


}
